package com.example.finalwork.service;

import com.example.finalwork.entity.User;
import com.example.finalwork.entity.dao.UserDao;
import com.example.finalwork.repository.UserRepository;
import com.example.finalwork.util.IdGenerator;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;


import java.util.List;
import java.util.Optional;

@Service
@Component
public class UserService implements IUserService {
    @Autowired
    UserRepository userRepository;


    @Override
    public User add(UserDao user){
        // 如果用户没有设置用户名，则使用昵称作为用户名
        if (user.getName() == null || user.getName().isEmpty()) {
            user.setName(user.getNickname());
        }
        // 如果未设置 ID，生成一个新的唯一 ID
        if (user.getId() == null || user.getId().isEmpty()) {
            user.setId(IdGenerator.generateUserId()); // 调用 ID 生成工具
        }
        // 检查用户名是否已存在
        if (userRepository.findByName(user.getName()).isPresent()) {
            throw new IllegalArgumentException("用户名已存在，请使用其他用户名");
        }
        if (userRepository.findByEmail(user.getEmail()).isPresent()) {
            throw new IllegalArgumentException("邮箱已被注册，请使用其他邮箱");
        }
        // 加密密码

        User userEntity = new User();
        BeanUtils.copyProperties(user, userEntity); // 将 UserDao 转换为 User 实体对象
        try {
            return userRepository.save(userEntity); // 保存到数据库
        } catch (Exception e) {
            e.printStackTrace(); // 打印详细的错误信息
            throw new IllegalArgumentException("保存用户失败，请稍后重试");
        }
    }


    @Override
    public User get(Integer userId) {
        return userRepository.findById(userId).orElseThrow(() -> {
           throw new IllegalArgumentException("用户不存在，参数异常！");
        });
    }


    @Override
    public User edit(UserDao user) {
        User userEntity = new User();
        BeanUtils.copyProperties(user, userEntity);
        return userRepository.save(userEntity);
    }

    @Override
    public void delete(Integer userId) {
        userRepository.deleteById(userId);
    }


    //自定义查询的
    public List<User> getUsersInAgeRange(Integer minAge, Integer maxAge) {
        if (minAge == null) {
            minAge = 0;
        }
        // 如果 maxAge 为空，则从 到最大值
        if (maxAge == null) {
            maxAge = 1000000000;
        }
        return userRepository.findByAgeBetween(minAge, maxAge);
    }

    @Override
    public User getByName(String userName) {
        Optional<User> userEntity = userRepository.findByName(userName);
        if (userEntity.isPresent()) {
            return userEntity.get();  // 如果用户存在，返回用户
        } else {
            throw new IllegalArgumentException("用户名不存在！");
        }
    }
    // 根据昵称模糊查询用户
    public List<User> getUsersByNickname(String nickname) {

        return userRepository.findByNicknameContaining(nickname);
    }

    @Override
    public User getByEmailAndPassword(String email, String password) {
        // 查询用户
        Optional<User> optionalUser = userRepository.findByEmail(email);
        // 判断用户是否存在
        if (optionalUser.isPresent()) {
            User user = optionalUser.get();
            if (password.equals(user.getPassword())) {
                return user; // 返回用户信息
            }
        }
        throw new IllegalArgumentException("邮箱或密码错误"); // 抛出错误提示
    }


}
